Forward Error Correction (FEC) codes have become a concurrent part of all modern communication systems. FEC involves processing a digital signal in order to improve data reliability by “introducing a known structure into a data sequence prior to transmission or storage. This structure enables a receiving system to detect and possibly correct errors caused by corruption from the channel and the receiver. As the name implies, this coding technique enables the decoder to correct errors without requesting retransmission of the original information.” (Crosslink is the Aerospace Corporation's magazine of advances in aerospace technology. The Aerospace Corporation (Volume 3, Number 1 (Winter 2001/2002))).
Convolutional turbo codes (CTC) and low-density parity-check codes (LDPC) are commonly used FEC code types. Both CTC and LDPC use iterative decoding algorithms that are based on a combination of soft-input-soft-output (SISO) decoders separated by interleavers. SISO decoder uses “soft information”—which is data with “soft” reliability—as input and produces soft information, but the output has more reliability than the input.
SISO decoders commonly employ two approaches: maximum a posteriori (MAP) decoding algorithm or Soft Output Viterbi Algorithm (SOVA). Of the two, MAP is generally considered to give the best performance in terms of minimizing decoding errors. However, SOVA is considered to be significantly less complex.
SOVA is a variant of the classical Viterbi algorithm, which is a dynamic approach for finding the most likely sequence of hidden states that result in a sequence of observed events. According to wikipedia.com:                “SOVA differs from the classical Viterbi algorithm in that it uses a modified path metric which takes into account the a priori probabilities of the input symbols, and produces a soft output indicating the reliability of the decision.        The first step in the SOVA algorithm is the selection of the survivor path, passing through one unique node at each time instant, t. Since each node has 2 branches converging at it (with one branch being chosen to form the Survivor Path, and the other being discarded), the difference in the branch metrics (or cost) between the chosen and discarded branches indicate the amount of error in the choice.        This cost is accumulated over the entire sliding window (usually equals at least five constraint lengths), to indicate the soft output measure of reliability of the hard bit decision of the Viterbi algorithm.”        